//第六天错题集

//1.
//break语句通常用于switch语句和循环语句；当break语句用于switch语句时，会跳出switch语句，继续执行switch之后的语句
//break语句用于while，do while ，for语句时，会跳出循环，执行循环之后的语句
//continue语句用于循环语句中，会提前结束循环，不执行continue之后的语句强制进行下一次循环

//2.
//一个函数不写返回值的类型，会默认为int型

//3.至少是其他数字两倍的大小
//法一：
int Findnums(int* nums, int numsSize, int n)
{
    //将一二两个元素中较小的元素作为最大值及其下标的初值
    int max = 0;
    int digit = 0;
    if (nums[0] > nums[1])
    {
        max = nums[1];
        digit = 1;
    }
    else
    {
        max = nums[0];
        digit = 0;
    }

    //寻找最大值下标及其次大值下标
    int i = 0;
    for (i = 0; i < numsSize; i++)
    {
        if (nums[i] > max && i != n)
        {
            max = nums[i];
            digit = i;
        }
    }

    return digit;
}

int dominantIndex(int* nums, int numsSize)
{
    if (numsSize == 1)//特殊情况，数组只有一个元素
    {
        return 0;
    }

    int firstmaxdig = Findnums(nums, numsSize, numsSize + 1);//标记最大值下标
    int secondmaxdig = Findnums(nums, numsSize, firstmaxdig);//标记次大值下标

    if (nums[firstmaxdig] >= nums[secondmaxdig] * 2)
    {
        return firstmaxdig;
    }
    else
    {
        return -1;
    }
}
//法二：
int dominantIndex(int* nums, int numsSize)
{
    int max = -1;//最大值
    int nextmax = -1;//次大值
    int digit = -1;//最大值下标

    int i = 0;
    for (i = 0; i < numsSize; i++)
    {
        if (nums[i] > max)
        {
            nextmax = max;
            max = nums[i];
            digit = i;
        }
        else if (nums[i] > nextmax)
        {
            nextmax = nums[i];
        }
    }
    return max >= nextmax * 2 ? digit : -1;
}